package io.github.source.media.bean;

import android.os.Message;

import com.orhanobut.logger.Logger;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;

/**
 * @ClassName: MediaCallback
 * @Description: TODO(这里用一句话描述这个类的作用)
 * @author: huangrongcai
 * @date: 2024/6/5
 * @Copyright: 黄嵘才（HuangRc)
 */
public class MediaCallbackImpl implements MediaCallback {

    // 使用 AtomicReference 来提高并发性能
    private static final AtomicReference<MediaCallbackImpl> INSTANCE = new AtomicReference<>();

    // 将构造函数设为私有，防止外部直接实例化
    private MediaCallbackImpl() {
        // 初始化代码
        Logger.i("初始化 MediaCallbackImpl");
    }

    // 提供一个全局的访问点来获取单例实例
    static MediaCallbackImpl get() {
        MediaCallbackImpl instance = INSTANCE.get();
        if (instance == null) {
            // 使用 CAS 操作来保证线程安全性
            instance = new MediaCallbackImpl();
            INSTANCE.compareAndSet(null, instance);
        }
        return instance;
    }

    List<MediaCallback> callbackList = new ArrayList<>();

    /**
     * 注册媒体回调监听器。
     *
     * @param callback 回调监听器接口。
     */
    public void registerListener(MediaCallback callback) {
        this.callbackList.add(callback);
    }

    public void unRegisterListener(MediaCallback callback) {
        this.callbackList.remove(callback);
    }

    @Override
    public void onMessage() {
        if (this.callbackList != null) {
            for (MediaCallback callback : this.callbackList) {
                callback.onMessage();
            }
        }
    }

    public void onMessage(String message) {
        if (callbackList != null) {
            for (MediaCallback callback : this.callbackList) {
                callback.onMessage();
            }
        }
    }

    @Override
    public void onMessage(Message msg) {
        if (callbackList != null) {
            for (MediaCallback callback : this.callbackList) {
                callback.onMessage();
            }
        }
    }
}
